]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
switcherPopup: Fix switch-group mouse click regression
authorHåkon Hægland <hakon.hagland@gmail.com>
Tue, 11 Nov 2025 18:46:32 +0000 (19:46 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Wed, 14 Jan 2026 17:44:01 +0000 (18:44 +0100)
The LongPressGesture 'may-recognize' callback in commit 314137c8c was
checking if clicks were inside '_switcherList', but thumbnails shown by
switch-group are siblings of _switcherList, not children.

This caused the gesture to incorrectly identify thumbnail clicks as
'outside' clicks, closing the popup before the click could complete.

Fix by adding a _isActorOutside() helper method that subclasses can
override to check additional containers. AppSwitcherPopup now properly
checks both _switcherList and _thumbnails.

Tested on Ubuntu 25.10 with GNOME Shell 49.0. Confirmed:
- switch-group mouse clicks now work
- switch-applications and switch-windows unaffected
- clicking outside the popup still closes it correctly
- no regressions introduced

Fixes: 314137c8c9 ("switcherPopup: Move to a ClutterGesture for closing the popup")
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8812
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3959>
(cherry picked from commit 811364ae59340195aa1c9c3edcc0d784d39105c2)

js/ui/altTab.js
js/ui/switcherPopup.js

index 9e6e15bbf53ae1d3a9adfdf1674fb2983c6f4467..82488e86dbb91b05d03bd8b4676ba211f8b81b32 100644 (file)
@@ -294,6 +294,11 @@ class AppSwitcherPopup extends SwitcherPopup.SwitcherPopup {
         super._onDestroy();
     }
 
+    _isActorOutside(actor) {
+        return super._isActorOutside(actor) &&
+               !this._thumbnails?.contains(actor);
+    }
+
     /**
      * _select:
      *
index 790ac091ec10f28512bb0c98f0486e70520a2324..487efbb30c40a3a71223323d3489b5e216ee75b8 100644 (file)
@@ -76,7 +76,7 @@ export const SwitcherPopup = GObject.registerClass({
             const actorAtCoords =
                 global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, coords.x, coords.y);
 
-            return !this._switcherList?.contains(actorAtCoords);
+            return this._isActorOutside(actorAtCoords);
         });
         longPressGesture.connect('recognize', () => {
             // User clicked outside
@@ -309,6 +309,10 @@ export const SwitcherPopup = GObject.registerClass({
         return GLib.SOURCE_REMOVE;
     }
 
+    _isActorOutside(actor) {
+        return !this._switcherList?.contains(actor);
+    }
+
     _resetNoModsTimeout() {
         if (this._noModsTimeoutId !== 0)
             GLib.source_remove(this._noModsTimeoutId);